<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // 一、
      function fn1(a, b) {
        // AO={
        //   b: undefined,
        //   // a的undefined被a() {}覆盖
        //   a: a() {},

        // }
        console.log(a);//a() {}
        console.log(b);//undefined
        var b = 234;
        // 赋值
        console.log(b); //234
        a = 123;
        // 赋值
        console.log(a);//123

        function a() {}
        var a;
        b = 234;
        var b = function () {};
        // 作用域链向上一层查找
        console.log(a);//123
        console.log(b);//function () {}
      }
      fn1(1);

      // 二、
      a = 100;

      function fn2(e) {
        // AO={
        //   b: undefined,
        //   c: undefined,
        //   a: undefined,
        //   f: undefined,
        // }
        function e() {}
        arguments[0] = 2;
        // 赋值
        console.log(e);//2
        if (a) {
          var b = 123;
        }
        var c;
        a = 10;
        var a;
        console.log(b);//undefined
        f = 123;
        console.log(c);//undefined
          // 赋值
        console.log(a);
      }
      var a;
      fn2(1);
      // 赋值
      console.log(a); // 100
      //赋值
      console.log(f); // 123

      // 三、
      // GO={
      //   // global中 undefined被 (global)覆盖
      //   global:fn3(global),

      // }
      global = 100;
      function fn3(global) {
        // AO={
        //   // undefined被global覆盖
        //   global:global,

        // }
        // 通过实参和形参相互统一 global=100;
        console.log(global);//100
        global = 200;
        // 赋值
        console.log(global);//200
        var global = 300;
      }

      fn3(global);
      var global;

      // 四、
      function fn4(a) {
        // AO={
        //   d: undefined,
        // c() {}覆盖 undefined
        //   c: c() {},
        //   b: undefined,
        // a() {}覆盖 undefined
        //   a: a() {}, 
        // }
        var d;
        var c;
        b = 10;
        var a;
        console.log(a);//a() {}
        a = 123;

        function a() {}
        // 赋值
        console.log(a);//123
        var b;
        console.log(b);//10

        function c() {}
        console.log(c);//c() {}
        console.log(d);//undefined
        d = 100;
        // 赋值
        console.log(d);//100
      }
      fn4(5);

      // 五、
      let obj = {
        a: 110,
        fn: function (a) {
          AO={ 
            // 将实参和形参相互统一
            // 110覆盖 undefined
            // a:110,
          }
         
          console.log(a);//110
          a = 10;
          // 赋值
          console.log(a);//10
        },
      };
      obj.fn(obj.a);

      // 六、
      // 1,1,2,3,5,8,13,.....
      // 求第n项的和, 例子: 求第三项的和, 1 + 1 + 2
      function f2(n) {
    if (n === 1 || n === 2) return n;
    return f2(n - 1) + f2(n - 2) + f2(n);
    }
    console.log(f2(3));

      // 七、
      // 要求输入id 返回数据对象
      // 例如: 输入id=111, 返回{id: 111,gname: '海尔冰箱'}
      var data = [
        {
          id: 1,
          name: '家电',
          goods: [
            {
              id: 11,
              gname: '冰箱',
              goods: [
                {
                  id: 111,
                  gname: '海尔冰箱',
                },
                {
                  id: 112,
                  gname: '小天鹅冰箱',
                },
              ],
            },
            {
              id: 12,
              gname: '洗衣机',
            },
          ],
        },
        {
          id: 2,
          name: '服饰',
        },
      ];
    </script>
  </body>
</html>
